From d8e4903fc844b1027e9439e7a4bd370a3815889b Mon Sep 17 00:00:00 2001 From: "iap10@freefall.cl.cam.ac.uk" Date: Wed, 18 May 2005 21:41:38 +0000 Subject: [PATCH] bitkeeper revision 1.1159.258.138 (428bb692pAqBH2bNfpxOYMXMKwbIsw) Move magic sysrq from workqueue to softirq context so that its more likely to work if the system is in a bad state. --- .../arch/xen/kernel/reboot.c | 30 +++++++------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c index b1bc5e0146..9dce9e2abc 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c +++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c @@ -52,7 +52,6 @@ EXPORT_SYMBOL(machine_power_off); /* Ignore multiple shutdown requests. */ static int shutting_down = -1; -static int pending_sysrq = -1; static void __do_suspend(void) { @@ -216,24 +215,23 @@ static void __shutdown_handler(void *unused) } } -static void __sysrq_handler(void *unused) +static void shutdown_handler(ctrl_msg_t *msg, unsigned long id) { + static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL); + + if ( msg->subtype == CMSG_SHUTDOWN_SYSRQ ) + { + int sysrq = ((shutdown_sysrq_t *)&msg->msg[0])->key; + #ifdef CONFIG_MAGIC_SYSRQ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) - handle_sysrq(pending_sysrq, NULL, NULL); + handle_sysrq(sysrq, NULL, NULL); #else - handle_sysrq(pending_sysrq, NULL, NULL, NULL); + handle_sysrq(sysrq, NULL, NULL, NULL); #endif #endif - pending_sysrq = -1; -} - -static void shutdown_handler(ctrl_msg_t *msg, unsigned long id) -{ - static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL); - static DECLARE_WORK(sysrq_work, __sysrq_handler, NULL); - - if ( (shutting_down == -1) && + } + else if ( (shutting_down == -1) && ((msg->subtype == CMSG_SHUTDOWN_POWEROFF) || (msg->subtype == CMSG_SHUTDOWN_REBOOT) || (msg->subtype == CMSG_SHUTDOWN_SUSPEND)) ) @@ -241,12 +239,6 @@ static void shutdown_handler(ctrl_msg_t *msg, unsigned long id) shutting_down = msg->subtype; schedule_work(&shutdown_work); } - else if ( (pending_sysrq == -1) && - (msg->subtype == CMSG_SHUTDOWN_SYSRQ) ) - { - pending_sysrq = ((shutdown_sysrq_t *)&msg->msg[0])->key; - schedule_work(&sysrq_work); - } else { printk("Ignore spurious shutdown request\n"); -- 2.30.2